using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._LASDataset
{
    /// <summary>
    /// <para>LAS Dataset Statistics</para>
    /// <para>Calculates or updates statistics for a LAS dataset and generates an optional statistics report.</para>
    /// <para>计算或更新 LAS 数据集的统计数据，并生成可选的统计数据报告。</para>
    /// </summary>    
    [DisplayName("LAS Dataset Statistics")]
    public class LasDatasetStatistics : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public LasDatasetStatistics()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_las_dataset">
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// </param>
        public LasDatasetStatistics(object _in_las_dataset)
        {
            this._in_las_dataset = _in_las_dataset;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "LAS Dataset Statistics";

        public override string CallName => "management.LasDatasetStatistics";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_las_dataset, _calculation_type.GetGPValue(), _out_file, _summary_level.GetGPValue(), _delimiter.GetGPValue(), _decimal_separator.GetGPValue(), _derived_las_dataset];

        /// <summary>
        /// <para>Input LAS Dataset</para>
        /// <para>The LAS dataset to process.</para>
        /// <para>要处理的 LAS 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_las_dataset { get; set; }


        /// <summary>
        /// <para>Skip Existing</para>
        /// <para><xdoc>
        ///   <para>Specifies whether statistics will be calculated for all lidar files or only for those that do not have statistics:</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—LAS files with up-to-date statistics will be skipped, and statistics will only be calculated for newly added LAS files or ones that were updated since the initial calculation. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Statistics will be calculated for all LAS files, including ones that have up-to-date statistics. This is useful if the LAS files were modified in an external application that went undetected by ArcGIS.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是针对所有激光雷达文件计算统计信息，还是仅针对没有统计信息的文件计算统计信息：</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将跳过具有最新统计数据的 LAS 文件，并且仅计算新添加的 LAS 文件或自初始计算以来已更新的 LAS 文件的统计数据。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—将计算所有 LAS 文件（包括具有最新统计数据的文件）的统计数据。如果在 ArcGIS 未检测到的外部应用程序中修改了 LAS 文件，则此功能非常有用。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Skip Existing")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _calculation_type_value _calculation_type { get; set; } = _calculation_type_value._true;

        public enum _calculation_type_value
        {
            /// <summary>
            /// <para>SKIP_EXISTING_STATS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SKIP_EXISTING_STATS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>OVERWRITE_EXISTING_STATS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("OVERWRITE_EXISTING_STATS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Output Statistics Report Text File</para>
        /// <para>The output text file that will contain the summary of the LAS dataset statistics.</para>
        /// <para>将包含 LAS 数据集统计数据摘要的输出文本文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Statistics Report Text File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_file { get; set; } = null;


        /// <summary>
        /// <para>Summary Level</para>
        /// <para><xdoc>
        ///   <para>Specify the type of summary contained in the report.</para>
        ///   <bulletList>
        ///     <bullet_item>Aggregate Statistics for All Files—The report will summarize statistics for the entire LAS dataset. This is the default.</bullet_item><para/>
        ///     <bullet_item>Statistics for Each LAS File—The report will summarize statistics for the LAS files referenced by the LAS dataset.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定报表中包含的摘要类型。</para>
        ///   <bulletList>
        ///     <bullet_item>所有文件的聚合统计数据 - 报告将汇总整个 LAS 数据集的统计数据。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>每个 LAS 文件的统计数据 - 报告将汇总 LAS 数据集所引用的 LAS 文件的统计数据。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Summary Level")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _summary_level_value _summary_level { get; set; } = _summary_level_value._DATASET;

        public enum _summary_level_value
        {
            /// <summary>
            /// <para>Aggregate Statistics for All Files</para>
            /// <para>Aggregate Statistics for All Files—The report will summarize statistics for the entire LAS dataset. This is the default.</para>
            /// <para>所有文件的聚合统计数据 - 报告将汇总整个 LAS 数据集的统计数据。这是默认设置。</para>
            /// </summary>
            [Description("Aggregate Statistics for All Files")]
            [GPEnumValue("DATASET")]
            _DATASET,

            /// <summary>
            /// <para>Statistics for Each LAS File</para>
            /// <para>Statistics for Each LAS File—The report will summarize statistics for the LAS files referenced by the LAS dataset.</para>
            /// <para>每个 LAS 文件的统计数据 - 报告将汇总 LAS 数据集所引用的 LAS 文件的统计数据。</para>
            /// </summary>
            [Description("Statistics for Each LAS File")]
            [GPEnumValue("LAS_FILES")]
            _LAS_FILES,

        }

        /// <summary>
        /// <para>Delimiter</para>
        /// <para><xdoc>
        ///   <para>The delimiter that will be used to indicate the separation of entries in the columns of the text file table.</para>
        ///   <bulletList>
        ///     <bullet_item>Space—A space will be used to delimit field values. This is the default.</bullet_item><para/>
        ///     <bullet_item>Comma—A comma will be used to delimit field values. This option is not applicable if the decimal separator is also a comma.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将用于指示文本文件表列中条目的分隔符。</para>
        ///   <bulletList>
        ///     <bullet_item>空格—空格将用于分隔字段值。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>逗号—逗号将用于分隔字段值。如果小数分隔符也是逗号，则此选项不适用。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Delimiter")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _delimiter_value _delimiter { get; set; } = _delimiter_value._COMMA;

        public enum _delimiter_value
        {
            /// <summary>
            /// <para>Comma</para>
            /// <para>Comma—A comma will be used to delimit field values. This option is not applicable if the decimal separator is also a comma.</para>
            /// <para>逗号—逗号将用于分隔字段值。如果小数分隔符也是逗号，则此选项不适用。</para>
            /// </summary>
            [Description("Comma")]
            [GPEnumValue("COMMA")]
            _COMMA,

            /// <summary>
            /// <para>Space</para>
            /// <para>Space—A space will be used to delimit field values. This is the default.</para>
            /// <para>空格—空格将用于分隔字段值。这是默认设置。</para>
            /// </summary>
            [Description("Space")]
            [GPEnumValue("SPACE")]
            _SPACE,

        }

        /// <summary>
        /// <para>Decimal Separator</para>
        /// <para><xdoc>
        ///   <para>The decimal character that will be used in the text file to differentiate the integer of a number from its fractional part.</para>
        ///   <bulletList>
        ///     <bullet_item>Point—A point will be used as the decimal character. This is the default.</bullet_item><para/>
        ///     <bullet_item>Comma—A comma will be used as the decimal character.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将在文本文件中用于区分数字的整数与其小数部分的十进制字符。</para>
        ///   <bulletList>
        ///     <bullet_item>点—点将用作十进制字符。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>逗号—逗号将用作十进制字符。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Decimal Separator")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _decimal_separator_value _decimal_separator { get; set; } = _decimal_separator_value._DECIMAL_POINT;

        public enum _decimal_separator_value
        {
            /// <summary>
            /// <para>Point</para>
            /// <para>Point—A point will be used as the decimal character. This is the default.</para>
            /// <para>点—点将用作十进制字符。这是默认设置。</para>
            /// </summary>
            [Description("Point")]
            [GPEnumValue("DECIMAL_POINT")]
            _DECIMAL_POINT,

            /// <summary>
            /// <para>Comma</para>
            /// <para>Comma—A comma will be used as the decimal character.</para>
            /// <para>逗号—逗号将用作十进制字符。</para>
            /// </summary>
            [Description("Comma")]
            [GPEnumValue("DECIMAL_COMMA")]
            _DECIMAL_COMMA,

        }

        /// <summary>
        /// <para>Updated Input LAS Dataset</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input LAS Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_las_dataset { get; set; }


        public LasDatasetStatistics SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}